var rrext = rrext || {};
rrext.option = {};
with(rrext.option) {
var OptionBase = function(name, defaultValue) {
	var self = this;
	self.name = name;
	self.defaultValue = defaultValue;
	self.serialize   = function(jsvalue){ return jsvalue; };
	self.deserialize = function(textvalue){ return textvalue; };
	self.write = function(value){
		if (value !== undefined || value === null) {
			return localStorage.setItem(self.name, self.serialize(value));
		} else {
			return undefined;
		}
	};
	self.read  = function(){
		var textvalue = localStorage.getItem(self.name);
		if (textvalue === undefined || textvalue === null || textvalue === '') {
			return self.defaultValue;
		} else {
			return self.deserialize(textvalue);
		}
	};
};
rrext.option.BoolOption = function(name, defaultValue) {
	OptionBase.call(this, name, defaultValue);
	this.serialize    = function(jsvalue){ return ""+jsvalue; };
	this.deserialize  = function(textvalue){ return textvalue === 'true'; };
};
rrext.option.TextOption = function(name, defaultValue) {
	OptionBase.call(this, name, defaultValue);
};

rrext.option.define = function() {
	var optionenum = Array.prototype.slice.call(arguments, 0);
	var options = function(){
		return optionenum.slice(0);;
	};
	for (var i in optionenum) {
		options[arguments[i].name] = arguments[i];
	}
	return options;
};

rrext.OPTION = define(
	new BoolOption('HideDeletedMessage', true),
	new BoolOption('EnableShiftEnter', true),
	new BoolOption('EnableCtrlEnter', true),
	new TextOption('MessageTemplateDefault', '[Time]<time>\n[User]<user>\n<content>'),
	new TextOption('MessageTemplateWithImage', '[Time]<time>\n[User]<user>\n<content>\n[Image]<image_url>'),
	new BoolOption('EnableSsl', false)
);

}/*end with(rrext.option)*/
